﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Gencode.Gengui.Wizzard;

namespace Gencode.PrsUtil.Dialog.Stammdaten.PersonWizard
{
	public partial class AbteilungPensum : Gencode.Gengui.Wizzard.WizzardControl
	{
		Gencode.PrsCommon.Data.Person.SimplePersonData data;
		DataView _pensum;
		int _maxProzent = 0;
		string _mandid;

		public AbteilungPensum(string previousControl, string nextControl, WizzardDialog controler, string mandid)
			: base(previousControl, nextControl, controler)
		{
			this._mandid = mandid;

			InitializeComponent();

			InitializeListData();
			InitializePensumGrid();
		}

		public override bool MoveNext()
		{
			return base.MoveNext();
		}

		public override bool Finish()
		{
			if ((_pensum != null && _pensum.Count > 0) ||
				listAdded.Items.Count > 0)
			{
				if (_pensum.Count > 0)
				{
					foreach (DataRowView r in _pensum)
					{
						try
						{
							data.Abteilungen.Add(new Gencode.PrsCommon.Data.DataObjects.SimplePersonAbteilung
							{
								AbteilungID = int.Parse(r["AbteilungID"].ToString()),
								DatumVon = r["Von"].ToString(),
								DatumBis = r["Bis"].ToString(),
								Prozentsatz = int.Parse(r["prozent"].ToString())
							});
								//PersonData.SetAbteilung(prsID, abteilungid, dateVon.Text, dateBis.Text, pens);
						}
						catch { }
					}
				}
				else
				{
					foreach (DataRow row in listAdded.AbteilungDataTable.Rows)
					{
						try
						{
							data.Abteilungen.Add(new Gencode.PrsCommon.Data.DataObjects.SimplePersonAbteilung
							{
								DatumVon = dateVon.Text,
								DatumBis = dateBis.Text,
								AbteilungID = int.Parse(row["abteilungid"].ToString()),
								Prozentsatz = int.Parse(row["prozent"].ToString())
							});
						}
						catch { }
					}
				}

				data.SaveToDatabase();

				return base.Finish();
			}

			MessageBox.Show(this, "Die Person wurde keiner Abteilung zugewiesen.\nBitte weisen Sie diese Person einer Abteilung zu.", "Keine Abteilung", MessageBoxButtons.OK, MessageBoxIcon.Hand);
			return false;
		}

		public override void InitializeWizzardControl()
		{
			data = Controler.DataObjects.GetType(typeof(Gencode.PrsCommon.Data.Person.SimplePersonData)) as Gencode.PrsCommon.Data.Person.SimplePersonData;

			dateVon.Text = data.PensumDatumVon;
			dateBis.Text = data.PensumDatumBis;

			_maxProzent = data.Arbeitspensum;
			txtPensGesammt.Text = data.Arbeitspensum.ToString();
			txtPensAbt.Text = data.Arbeitspensum.ToString();

			Controler.EnableCanleButton = true;
		}

		private void InitializePensumGrid()
		{
			_pensum = Gencode.PrsCommon.Data.Person.PersonData.GetPersonAbteilungHistory(0);
			pensumGrid.AutoGenerateColumns = false;
			pensumGrid.DataSource = _pensum;

			pensumGrid.Columns["abteilung"].DataPropertyName = "Name";
			pensumGrid.Columns["von"].DataPropertyName = "Von";
			pensumGrid.Columns["bis"].DataPropertyName = "Bis";
			pensumGrid.Columns["prozent"].DataPropertyName = "Prozent";
			pensumGrid.Columns["status"].DataPropertyName = "Statustext";
		}

		private void InitializeListData()
		{
			listExisting.Assigned = false;

			listAdded.InitData(0, _mandid);
			listExisting.InitData(0, _mandid);

			_maxProzent -= listAdded.GetTotalPensum;

			txtPensGesammt.Text = _maxProzent.ToString();
		}

		private void dateVon_ValueChanged(object sender, EventArgs e)
		{
			if (dateVon.Value.Day != 1)
			{
				dateVon.Value = new DateTime(dateVon.Value.Year, dateVon.Value.Month, 1);
			}
		}

		private void dateBis_ValueChanged(object sender, EventArgs e)
		{
			if (dateBis.Value.Day != DateTime.DaysInMonth(dateBis.Value.Year, dateBis.Value.Month))
			{
				dateBis.Value = new DateTime(dateBis.Value.Year, dateBis.Value.Month, DateTime.DaysInMonth(dateBis.Value.Year, dateBis.Value.Month));
			}
		}

		private void btnAdd_Click(object sender, EventArgs e)
		{
			if (listExisting.SelectedAbteilungID > 0)
			{
				int pens = 0;
				try
				{
					pens = int.Parse(txtPensAbt.Text);
				}
				catch
				{
					MessageBox.Show(this, "Es wurde kein Pensum-Prozentsatz ausgewählt.\nBitte geben Sie ein Prozentsatz ein.", "Kein Prozentsatz", MessageBoxButtons.OK);
					txtPensAbt.Focus();
				}

				if (pens > 0 && pens <= _maxProzent)
				{
					if (dateVon.Value < dateBis.Value)
					{
						listAdded.AddItem(listExisting.SelectedRow, pens);
						listExisting.RemoveItem(listExisting.SelectedRow);

						RefreshData();
					}
				}
				else
				{
					MessageBox.Show(this, "Ungültiger Pensum-Prozentsatz.\nBitte wälhlen Sie einen Prozentsatz zwischen 0 und " + _maxProzent + " aus", "Ungültiger Prozentsatz", MessageBoxButtons.OK);
					txtPensAbt.Focus();
				}
			}
		}

		private void button2_Click(object sender, EventArgs e)
		{
			if (listAdded.SelectedAbteilungID > 0)
			{
				listExisting.AddItem(listAdded.SelectedRow, 0);
				listAdded.RemoveItem(listAdded.SelectedRow);

				RefreshData();
			}
		}

		private void RefreshData()
		{
			_maxProzent = data.Arbeitspensum;
			_maxProzent -= listAdded.GetTotalPensum;

			txtPensAbt.Text = "0";
			txtPensGesammt.Text = _maxProzent.ToString();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			//reset grid
			InitializePensumGrid();

			foreach (DataRow row in listAdded.AbteilungDataTable.Rows)
			{
				DataRow dr = _pensum.Table.NewRow();

				dr["Name"] = row["name"].ToString();
				dr["Von"] = dateVon.Text;
				dr["Bis"] = dateBis.Text;
				dr["AbteilungID"] = row["abteilungid"].ToString();
				dr["prozent"] = row["prozent"].ToString();

				_pensum.Table.Rows.Add(dr);
			}
		}
	}
}
